package org.filetransfer.file_transfer_java_backend.service;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

/**
 * Token黑名单服务
 * 用于管理被吊销的refresh token
 */
@Service
@Slf4j
public class TokenBlacklistService {
    
    // 使用内存存储黑名单token，生产环境建议使用Redis
    private final Set<String> blacklistedTokens = ConcurrentHashMap.newKeySet();
    
    /**
     * 将token添加到黑名单
     * @param token 要吊销的token
     */
    public void addToBlacklist(String token) {
        blacklistedTokens.add(token);
        log.info("Token已添加到黑名单: {}", token.substring(0, Math.min(token.length(), 20)) + "...");
    }
    
    /**
     * 检查token是否在黑名单中
     * @param token 要检查的token
     * @return true表示token已被吊销
     */
    public boolean isBlacklisted(String token) {
        return blacklistedTokens.contains(token);
    }
    
    /**
     * 从黑名单中移除token（通常用于token过期后的清理）
     * @param token 要移除的token
     */
    public void removeFromBlacklist(String token) {
        blacklistedTokens.remove(token);
        log.debug("Token已从黑名单移除: {}", token.substring(0, Math.min(token.length(), 20)) + "...");
    }
    
    /**
     * 获取黑名单大小
     * @return 黑名单中的token数量
     */
    public int getBlacklistSize() {
        return blacklistedTokens.size();
    }
    
    /**
     * 清空黑名单
     */
    public void clearBlacklist() {
        blacklistedTokens.clear();
        log.info("Token黑名单已清空");
    }
}
